home *** CD-ROM | disk | FTP | other *** search
/ MacWorld UK 2000 March / MW_UK_2000_03.iso / Shareware World / Utilities / Text Processing / Alpha / Tcl / Completions / TclCompletions.tcl < prev    next >
Encoding:
Text File  |  1999-09-17  |  8.6 KB  |  215 lines  |  [TEXT/ALFA]

  1. ## -*-Tcl-*-
  2.  # ###################################################################
  3.  #  Vince's Additions - an extension package for Alpha
  4.  # 
  5.  #  FILE: "TclCompletions.tcl"
  6.  #                                    created: 31/7/97 {3:01:54 pm} 
  7.  #                                last update: 17/9/1999 {10:45:56 pm} 
  8.  #  Author: Vince Darley
  9.  #  E-mail: <darley@fas.harvard.edu>
  10.  #    mail: Division of Engineering and Applied Sciences, Harvard University
  11.  #          Oxford Street, Cambridge MA 02138, USA
  12.  #     www: <http://www.fas.harvard.edu/~darley/>
  13.  #  
  14.  # Copyright (c) 1997-1998  Vince Darley, all rights reserved
  15.  # 
  16.  # ###################################################################
  17.  ##
  18.  
  19. ensureset completions(Tcl) {contraction Proc Vvar completion::cmd Ensemble completion::electric Var}
  20. ensureset completions(Shel) {Globalvar Proc completion::cmd Ensemble completion::electric Filename Var}
  21.  
  22. lunion TclTemplates "createNewClass"
  23.  
  24. # ◊◊◊◊ Completions ◊◊◊◊ #
  25.  
  26. proc Tcl::Completion::Globalvar {dummy} {
  27.     set lastword [completion::lastWord]
  28.     if {[string length $lastword] < 3} { return 0 }
  29.     if {[string index $lastword 0] != "\$"} { return 0 }
  30.     set lastword [string range $lastword 1 end]
  31.     set matches [lsort [info globals ${lastword}*]]
  32.     return [completion::matchUtil Tcl::Completion::Globalvar $lastword $matches]
  33. }
  34.  
  35. proc Tcl::Completion::Proc {dummy} {
  36.     set lastword [completion::lastWord p]
  37.     if {[string length $lastword] < 3} { return 0 }
  38.     if {[lookAt [pos::math $p - 1]] != "\["} { return 0 }
  39.     set matches [lsort [info commands ${lastword}*]]
  40.     return [completion::matchUtil Tcl::Completion::Proc $lastword $matches]
  41. }
  42.  
  43.  
  44. ## 
  45.  # -------------------------------------------------------------------------
  46.  #   
  47.  #  "Tcl::Completion::Var" --
  48.  #  
  49.  #   A mildly adaptive call of completion::word, in which we realise we 
  50.  #   should complete '$abc...' if we can only see 'abc...'.  The standard
  51.  #   procedure considers '$' to be part of a word so that would otherwise
  52.  #   fail.
  53.  # -------------------------------------------------------------------------
  54.  ##
  55. proc Tcl::Completion::Var {dummy} {
  56.     global completion::in_progress_pos completion_got completion_looking
  57.     
  58.     # cursor changed place?
  59.     set pos [getPos]
  60.     if {$pos==${completion::in_progress_pos}} {
  61.     return [completion::update Tcl::Completion::Var $completion_got $completion_looking]
  62.     }
  63.     
  64.     set lastword [completion::lastWord]
  65.     if { [string index $lastword 0] == "\$" } {
  66.     set completion_got [string range $lastword 1 end]
  67.     set completion_looking $completion_got
  68.     return [completion::update Tcl::Completion::Var $completion_got $completion_looking]
  69.     } else {
  70.     return [completion::update completion::word]
  71.     }
  72. }
  73.  
  74. ## 
  75.  # -------------------------------------------------------------------------
  76.  # 
  77.  # "Tcl::Completion::Vvar" --
  78.  # 
  79.  #  Try to complete a variable, provided it seems to be a variable name.
  80.  #  This means it is preceded by '$' or by 'set ' or 'arrayname(',...
  81.  #  
  82.  #  This allows us to complete variable names which begin 'str', 'li'
  83.  #  etc. preferentially, since they would otherwise be expanded into
  84.  #  'string', 'lindex' etc before they had a chance to be completed
  85.  #  as variables.
  86.  # -------------------------------------------------------------------------
  87.  ##
  88. proc Tcl::Completion::Vvar {dummy} {
  89.     global completion_got completion_looking
  90.     set lastword [completion::lastTwoWords prev]
  91.     if { [string index $lastword 0] == "\$" } {
  92.     set completion_got [string range $lastword 1 end]
  93.     set completion_looking $completion_got
  94.     return [completion::update Tcl::Completion::Vvar $completion_got $completion_looking]
  95.     } elseif {[regexp {\($} $prev] \
  96.       || ([regexp "^(set|global|variable|get)\[ \t\]+\$" $prev])} {
  97.     return [completion::update completion::word]
  98.     } else {
  99.     return 0
  100.     }
  101. }
  102.  
  103. set Tclstringcmds { 
  104.     bytelength compare equal first index is last length map match range
  105.     repeat replace tolower toupper totitle trim trimleft trimright wordend
  106.     wordstart
  107. }
  108. set Tclfilecmds { 
  109.     atime attributes channels copy delete dirname executable exists
  110.     extension isdirectory isfile join lstat mtime mkdir nativename owned
  111.     pathtype readable readlink rename rootname size split stat tail type
  112.     volumes writable
  113. }
  114. set Tcltracecmds {
  115.     variable vdelete vinfo
  116. }
  117.  
  118. set "Tclelectrics(trace variable)" " •name• •ops• •command•"
  119. set "Tclelectrics(trace vdelete)" " •name• •ops• •command•"
  120. set "Tclelectrics(trace vinfo)" " •name•"
  121. set "Tclelectrics(string compare)" " •is-bigger• •compared-with•"
  122. set "Tclelectrics(string first)" " •search-for• •search-in•"
  123. set "Tclelectrics(string index)" " •string• •charIndex•"
  124. set "Tclelectrics(string last)" " •search-for• •search-in•"
  125. set "Tclelectrics(string length)" " •string•"
  126. set "Tclelectrics(string match)" " •pattern• •string•"
  127. set "Tclelectrics(string range)" " •string• •first• •last•"
  128. set "Tclelectrics(string tolower)" " •string•"
  129. set "Tclelectrics(string toupper)" " •string•"
  130. set "Tclelectrics(string trim)" " •string• •?chars?•"
  131. set "Tclelectrics(string trimleft)" " •string• •?chars?•"
  132. set "Tclelectrics(string trimright)" " •string• •?chars?•"
  133. set "Tclelectrics(string wordend)" " •string• •index•"
  134. set "Tclelectrics(string wordstart)" " •string• •index•"
  135. set "Tclelectrics(file atime)" " •name•"
  136. set "Tclelectrics(file copy)" " •-force?• •source...source• •target•"
  137. set "Tclelectrics(file delete)" " •name•"
  138. set "Tclelectrics(file dirname)" " •name•"
  139. set "Tclelectrics(file executable)" " •name•"
  140. set "Tclelectrics(file exists)" " •name•"
  141. set "Tclelectrics(file extension)" " •name•"
  142. set "Tclelectrics(file isdirectory)" " •name•"
  143. set "Tclelectrics(file isfile)" " •name•"
  144. set "Tclelectrics(file join)" " •name• •name ... name•"
  145. set "Tclelectrics(file lstat)" " •name• •varName•"
  146. set "Tclelectrics(file mkdir)" " •name•"
  147. set "Tclelectrics(file mtime)" " •name•"
  148. set "Tclelectrics(file owned)" " •name•"
  149. set "Tclelectrics(file readable)" " •name•"
  150. set "Tclelectrics(file readlink)" " •name•"
  151. set "Tclelectrics(file root)" " •name•"
  152. set "Tclelectrics(file rootname)" " •name•"
  153. set "Tclelectrics(file size)" " •name•"
  154. set "Tclelectrics(file split)" " •name•"
  155. set "Tclelectrics(file stat)" " •name• •varName•"
  156. set "Tclelectrics(file tail)" " •name•"
  157. set "Tclelectrics(file type)" " •name•"
  158. set "Tclelectrics(file writable)" " •name•"
  159.  
  160. set Tclelectrics(for) " \{•start•\} \{•test•\} \{•increment•\} \{\r\t•body•\r\}\r••"
  161. set Tclelectrics(while) " \{•test•\} \{\r\t•body•\r\}\r••"
  162. set Tclelectrics(if) " \{•test•\} \{\r\t•true body•\r\} ••"
  163. set Tclelectrics(elseif) " \{•test•\} \{\n\t•true body•\n\} ••"
  164. set Tclelectrics(else) " \{\n\t•else body•\n\} ••"
  165. set Tclelectrics(proc) " •name• \{•args•\} \{\n\t•body•\n\}"
  166. set Tclelectrics(switch) " \{••\} \{\n…\"••\" \{\n\t••\n…\}\n\}\n••"
  167. set Tclelectrics(lindex) " •list• •element•"
  168. set Tclelectrics(lrange) " •list• •first• •last•"
  169. set Tclelectrics(lsearch) " •?switches?• •list• •pattern•"
  170. set Tclelectrics(regsub) " •?switches?• •exp• •string• •subSpec• •varName•"
  171. set Tclelectrics(regexp) " •?switches?• •exp• •string• •?matchVars...?•"
  172. set Tclelectrics(upvar) " •?level?• •varName• •localVar•"
  173. set Tclelectrics(lreplace) " •list• •first• •last• •?element element ...?•"
  174. set Tclelectrics(linsert) " •list• •index• •element• •?element element ...?•"
  175. set Tclelectrics(lappend) " •varName• •value• •?value value ...?•"
  176. set Tclelectrics(scan) " •string• •format• •varName• •?varName ...?•"
  177.  
  178. set Tclelectrics(body) " \{•string•\} \{\n\t•body•\n\}"
  179. set Tclelectrics(class) " •name• \{\n\tinherit •parent•\n\}"
  180.  
  181. # ◊◊◊◊ ..Tclelectrics --contractions ◊◊◊◊ #
  182. # these make use of indirection
  183. set Tclelectrics(s'c) "◊»string compare"
  184. set Tclelectrics(s'f) "◊»string first"
  185. set Tclelectrics(s'i) "◊»string index"
  186. set Tclelectrics(s'l) "◊»string last"
  187. set Tclelectrics(s'len) "◊»string length"
  188. set Tclelectrics(s'r) "◊»string range"
  189. set Tclelectrics(s'tol) "◊»string tolower"
  190. set Tclelectrics(s'tou) "◊»string toupper"
  191. set Tclelectrics(s't) "◊»string trim"
  192. set Tclelectrics(s'tl) "◊»string trimleft"
  193. set Tclelectrics(s'tr) "◊»string trimright"
  194. set Tclelectrics(f'a) "◊»file atime"
  195. set Tclelectrics(f'd) "◊»file dirname"
  196. set Tclelectrics(f'exe) "◊»file executable"
  197. set Tclelectrics(f'exi) "◊»file exists"
  198. set Tclelectrics(f'ext) "◊»file extension"
  199. set Tclelectrics(f'id) "◊»file isdirectory"
  200. set Tclelectrics(f'if) "◊»file isfile"
  201. set Tclelectrics(f'l) "◊»file lstat"
  202. set Tclelectrics(f'm) "◊»file mtime"
  203. set Tclelectrics(f'o) "◊»file owned"
  204. set Tclelectrics(f'r) "◊»file readable"
  205. set Tclelectrics(f'r) "◊»file readlink"
  206. set Tclelectrics(f'rn) "◊»file rootname"
  207. set Tclelectrics(f'size) "◊»file size"
  208. set Tclelectrics(f'stat) "◊»file stat"
  209. set Tclelectrics(f'tail) "◊»file tail"
  210. set Tclelectrics(f'type) "◊»file type"
  211. set Tclelectrics(f'w) "◊»file writable"
  212.  
  213.  
  214.  
  215.